#include "dialogue_menu.h"
#include <unistd.h>
// 对话菜单主逻辑：展示交互界面、调用各类功能
void dialogue_menu(Client *client) {
    if (client == NULL) {
        printf("[Error] dialogue_menu: Client is NULL!\n");
        return;
    }
    printf("\n===== 进入对话菜单 =====\n");
    printf("欢迎你可进行以下操作：\n");
    printf("1. 发送消息\n");
    printf("2. 显示历史消息（示例逻辑）\n");
    printf("3. 保存聊天数据\n");
    printf("4. 选择文件发送（模拟）\n");
    printf("0. 返回上一级\n");

    int choice;
    while (1) {
        printf("\n请输入操作编号：");
        if (scanf("%d", &choice) != 1) {
            // 处理输入非数字的情况
            while (getchar() != '\n'); 
            printf("输入无效，请输入数字！\n");
            continue;
        }

        switch (choice) {
            case 1: {
                char msg[256] = {0};
                msg_input(msg, sizeof(msg));
                // 若有网络通信，可调用 send_message(client->sockfd, msg); 发送给服务端
                printf("已准备发送消息：%s\n", msg);
                break;
            }
            case 2: {
                // 示例：模拟显示一条测试消息，实际可从缓冲区/文件读取
                char test_msg[] = "【系统提示】这是一条历史消息示例～";
                msg_display(test_msg);
                break;
            }
            case 3: {
                char data[512] = "示例聊天数据：Hello, Server!"; 
                // 实际可拼接更多聊天记录
                char filename[64] = "chat_data.txt";
                if (save_data(filename, data)) {
                    printf("数据已保存至 %s\n", filename);
                } else {
                    printf("保存数据失败！\n");
                }
                break;
            }
            case 4: {
                file_choose(client);
                break;
            }
            case 0: {
                printf("退出对话菜单，返回上一级...\n");
                return; 
            }
            default: {
                printf("无效操作，请输入 0-4 之间的编号！\n");
                break;
            }
        }
    }
}

// 消息输入：获取用户输入的聊天内容
void msg_input(char *msg, int max_len) {
    printf("请输入聊天内容（不超过 %d 字符）：\n", max_len - 1);
    // 清理输入缓冲区
    getchar(); 
    // 读取一行输入
    fgets(msg, max_len, stdin); 
    // 去掉换行符
    msg[strcspn(msg, "\n")] = '\0'; 
}

// 消息显示：打印/展示消息内容
void msg_display(const char *msg) {
    printf("[消息展示]：%s\n", msg);
}

// 保存数据到文件：返回 1 成功，0 失败
int save_data(const char *filename, const char *data) {
    FILE *fp = fopen(filename, "w");
    if (fp == NULL) {
        perror("fopen");
        return 0;
    }
    if (fputs(data, fp) == EOF) {
        fclose(fp);
        perror("fputs");
        return 0;
    }
    fclose(fp);
    return 1;
}

// 文件选择：模拟选择文件（可扩展为读取文件并发送给服务端）
void file_choose(const Client *client) {
    if (client == NULL) {
        printf("[Error] file_choose: Client is NULL!\n");
        return;
    }
    printf("=== 模拟文件选择 ===\n");
    printf("当前用户,可选择本地文\n");
    printf("1. file1.txt\n");
    printf("2. file2.txt\n");
    printf("0. 取消\n");

    int file_choice;
    printf("请输入文件编号：");
    if (scanf("%d", &file_choice) != 1) {
        while (getchar() != '\n');
        printf("输入无效！\n");
        return;
    }

    switch (file_choice) {
        case 1:
            printf("已选择 file1.txt，可扩展逻辑读取并发送给服务端～\n");
            break;
        case 2:
            printf("已选择 file2.txt，可扩展逻辑读取并发送给服务端～\n");
            break;
        case 0:
            printf("取消文件选择操作\n");
            break;
        default:
            printf("无效编号，请重新选择！\n");
            break;
    }
}


